【新機能】API Gateway のステージに AWS WAF を直接関連づけられるようになりました
2018年11月5日です。さらりと便利なリリースが飛び込んできましたね。
AWS WAF を Amazon API Gateway に使用して、SQLインジェクションやクロスサイトスクリプティング(XSS)などの攻撃から保護することができます。さらに、ルールを使用して、IPアドレス、地域、要求サイズ、文字列または正規表現パターンに基づいてWebリクエストをフィルタリングできます。これらの条件をHTTPヘッダーまたはリクエストボディに設定することができます。複雑なルールを作成して、特定のユーザーエージェント、不正なボット、またはスクレイピングからの攻撃をブロックすることができます。また、AWS Marketplace の管理ルールを利用して、OWASPトップ10のセキュリティリスクやCommon Vulnerabilities and Exposures(CVE)などの一般的な脅威からAPIを即座に保護することができます。
利用できるリージョンは以下です:
- Asia Pacific (Tokyo)
- US East (N. Virginia)
- US East (Ohio)
- US West (Oregon)
- US West (N. California)
- EU (Ireland)
- EU (Frankfurt)
- Asia Pacific (Sydney)
どうなるのか
API Gateway の API に対して直接 WAF を関連付けることはできませんでした。APIのセキュリティを高めようと思ったら、
- API Gateway の Resource Policy で IP アドレスのブラックリストを設定したり、AWS アカウント、ソースVPCのホワイトリストを設定する
- デプロイしたAPIのデフォルトスロットリングを設定して過剰にリクエストを受けないようにする
- API Gateway の前段に CloudFront + WAF を置くワークアラウンドをとる
という手段で対応していたと思います。Resource Policy は引き続き利用できますが、セキュリティ要件や達成したい目的で設定内容も開発中・リリース後問わず変わってくるので、柔軟に対応できるWAFを直接使えるのは魅力的ですね。
試す
WAFを作成するときに既存のAPIに関連づける
私がいろいろなブログで使いまわしているAPIがすでにあります。そこに新しいWAFを作って関連付けてみます。この操作は、WAFを新しく作成するとき に設定できます。
Resource type to associate with web ACL
で ALB に加えて API Gateway が選べるようになっていました。また、API Gateway を特定した後にステージを指定していることがわかります。このことから、API Gateway と API Gateway のステージが紐づくということがわかります。WAFには、特定のIPアドレス以外からはアクセスできないようなルールを設定しました。
許可されているIPアドレスの場合、通常通りレスポンスを受け取ることができます。
GET https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v1/users
許可されていないIPからアクセスすると、レスポンスは以下のようになりました。リクエストするURLは同じです。
GET https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v1/users
WAFによってブロックされていることがわかります。
API のデプロイ済みステージの設定でWAFを関連づける
API Gateway の画面からも設定できます。デプロイ済みのステージの「Settings」タブを開きましょう。
WAF を設定できる欄が追加されていますね。作成済みのWAFを、ここで関連付けることができます。
まとめ
今回のリリースで、API Gateway のステージに対してWAFを設定できるようになりました。IP Address 制限や DDoS 対策はもちろん、マネージドルールを使って、要件に合わせてAPIを保護することも検討できますね。東京リージョンでも利用できますので、是非ためしてみてください。